/**
 * 日期时间格式化工具类
 * 统一处理各种时间格式转换
 */

/**
 * 时间戳转可读时间，精确到秒
 * @param {number|string} ts 时间戳
 * @returns {string} 格式：YYYY-MM-DD HH:mm:ss
 */
function formatTimestamp(ts) {
  if (!ts) return ''
  const t = typeof ts === 'number' ? ts : parseInt(ts, 10)
  if (Number.isNaN(t) || t <= 0) return ''
  const d = new Date(t)
  const Y = d.getFullYear()
  const M = String(d.getMonth() + 1).padStart(2, '0')
  const D = String(d.getDate()).padStart(2, '0')
  const h = String(d.getHours()).padStart(2, '0')
  const m = String(d.getMinutes()).padStart(2, '0')
  const s = String(d.getSeconds()).padStart(2, '0')
  return `${Y}-${M}-${D} ${h}:${m}:${s}`
}

/**
 * 格式化为中文年月日
 * @param {number|string} ts 时间戳
 * @returns {string} 格式：YYYY年MM月DD日
 */
function formatDateYMD(ts) {
  if (!ts) return ''
  const t = typeof ts === 'number' ? ts : parseInt(ts, 10)
  if (Number.isNaN(t) || t <= 0) return ''
  const d = new Date(t)
  const Y = d.getFullYear()
  const M = String(d.getMonth() + 1).padStart(2, '0')
  const D = String(d.getDate()).padStart(2, '0')
  return `${Y}年${M}月${D}日`
}

/**
 * 格式化时间戳为年月日对象（用于证书预览）
 * @param {number|string} ts 时间戳
 * @returns {object} {year, month, day}
 */
function formatToYearMonthDay(ts) {
  if (!ts) return { year: '', month: '', day: '' }
  const t = typeof ts === 'number' ? ts : parseInt(ts, 10)
  if (Number.isNaN(t) || t <= 0) return { year: '', month: '', day: '' }
  const d = new Date(t)
  return {
    year: d.getFullYear(),
    month: d.getMonth() + 1,
    day: d.getDate()
  }
}

/**
 * 时间戳转换为标准日期时间字符串（后端接口使用）
 * @param {number|string} ts 时间戳
 * @returns {string} 格式：YYYY-MM-DD HH:mm:ss（带空格分隔）
 */
function formatToStandardDateTime(ts) {
  if (!ts) return ''
  const t = typeof ts === 'number' ? ts : parseInt(ts, 10)
  if (Number.isNaN(t) || t <= 0) return ''
  const date = new Date(t)
  const year = date.getFullYear()
  const month = String(date.getMonth() + 1).padStart(2, '0')
  const day = String(date.getDate()).padStart(2, '0')
  const hours = String(date.getHours()).padStart(2, '0')
  const minutes = String(date.getMinutes()).padStart(2, '0')
  const seconds = String(date.getSeconds()).padStart(2, '0')
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
}

/**
 * 格式化为只显示月日（用于页面回显，不包含年份）
 * 支持传入时间戳（number）或日期字符串（"YYYY-MM-DD" / ISO）
 * 返回示例："11月11日"
 */
function formatMonthDay(ts) {
  if (!ts && ts !== 0) return ''

  // 如果是形如 "YYYY-MM-DD" 的日期字符串，直接解析
  if (typeof ts === 'string') {
    // 支持 "YYYY-MM-DD" 或 "YYYY/MM/DD" 或 ISO 开头
    const match = ts.match(/(\d{4})[-\/]?(\d{2})[-\/]?(\d{2})/)
    if (match) {
      const month = String(parseInt(match[2], 10)).padStart(2, '0')
      const day = String(parseInt(match[3], 10)).padStart(2, '0')
      return `${month}月${day}日`
    }
    // 尝试解析为时间戳字符串
    const t = parseInt(ts, 10)
    if (!Number.isNaN(t) && t > 0) {
      const d = new Date(t)
      const M = String(d.getMonth() + 1).padStart(2, '0')
      const D = String(d.getDate()).padStart(2, '0')
      return `${M}月${D}日`
    }
    return ''
  }

  const t = typeof ts === 'number' ? ts : parseInt(ts, 10)
  if (Number.isNaN(t) || t <= 0) return ''
  const d = new Date(t)
  const M = String(d.getMonth() + 1).padStart(2, '0')
  const D = String(d.getDate()).padStart(2, '0')
  return `${M}月${D}日`
}

module.exports = {
  formatTimestamp,
  formatDateYMD,
  formatToYearMonthDay,
  formatToStandardDateTime
  ,formatMonthDay
}
